package ca.etsmtl.log120.tp3.cartes;

/******************************************************
Cours : LOG120
Session : E2011
Groupe : 01
Projet : Laboratoire #3
Etudiants : Nicolas Blais Miko
 	 		Yohan Trepanier-Montpetit
Codes perm. : BLAN24079109
			  TREY16079108
Professeur : Chamseddine Talhi
Charge de labo : Eric Goulet
Nom du fichier : ListeAnalyseurs.java
Date cree : 2011-07-06
Date dern. modif. 2011-07-06
*************************************************** ****
Historique des modifications
*************************************************** ****

***************************************************/

public class Carte implements Comparable<Carte>{

	private Denomination denomination;
	private CouleurCarte couleurCarte;
	
	public Carte(Denomination denom, CouleurCarte couleur) {
		
		denomination = denom;
		couleurCarte = couleur;
	}

	/**
	 * Methode qui permet de comparer deux cartes pour savoir laquelle est la meilleure
	 * STRATEGIE: Puisque la carte la plus forte entre deux carte dépend uniquement de la denomination,
	 * 			  on compare les cartes seulement selon leur denomination
	 */
	@Override
	public int compareTo(Carte carte) {
		
		//On compare la denomination de l'objet qui appel avec la denomination de la carte recue en parametre
		return denomination.compareTo(carte.getDenomination());
	}

	/**
	 * Methode retournant la couleur de la carte qui appel
	 * @return La couleur de la carte
	 */
	public CouleurCarte getCouleur() {
		
		return couleurCarte;
	}

	/**
	 * Methode retournant la denomination de la carte qui appel
	 * @return La denomination de la carte
	 */
	public Denomination getDenomination() {
		
		return denomination;
	}
	
	/**
	 * Methode permettant de verifier si deux cartes sont identiques
	 * @param autreCarte Carte avec laquel on compare
	 * @return True si les deux cartes sont identiques, False sinon
	 */
	public boolean equals(Carte autreCarte){
				
		if(autreCarte != null){
			if(autreCarte.getClass().equals(Carte.class))
				return denomination == ((Carte) autreCarte).getDenomination() && couleurCarte == ((Carte) autreCarte).getCouleur();
		}
		return false;
	}
	
	/**
	 * Methode qui retourne une chaine de caractere decrivant la carte (pour debugger)
	 */
	public String toString(){
		
		return "Denomination: " + denomination.toString() + " Couleur: " + couleurCarte.toString();
	}
	
	/**
	 * Methode qui retourne 1 si l'objet recu est identique a l'objet qui appel ou 0
	 * si les deux objets ne sont pas egaux
	 * @param autreCarte La carte avec laquel on compare
	 * @return 1 si ils sont egaux et 0 sinon
	 */
	public int hashCodde(Carte autreCarte){
		
		if(this.equals(autreCarte))
			return 1;
		else
			return 0;
	}	

}
